package com.tjrac.generalpermissions.service.impl;

import com.tjrac.filter.stereotype.PermissionControl;
import com.tjrac.generalpermissions.dao.PTypeDao;
import com.tjrac.generalpermissions.domain.PType;
import com.tjrac.generalpermissions.epception.MsgException;
import com.tjrac.generalpermissions.epception.statusCode.PTypeCode;
import com.tjrac.generalpermissions.service.PTypeService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author ZeNing
 * @create 2020-12-01 13:54
 */
@Service
@Transactional
public class PTypeServiceImpl implements PTypeService {

    @Resource
    PTypeDao pTypeDao;

    @PermissionControl("查看权限类型")
    @Override
    public PType queryById(int id) throws MsgException {
        PType pType = pTypeDao.queryById(id);
        if (pType == null) {
            throw new MsgException(PTypeCode.NOT_EXIST_PERMISSION_TYPE, "该权限类型不存在,查看失败");
        } else {
            return pType;
        }
    }

    @PermissionControl("查看所有权限类型")
    @Override
    public String queryAllPType() throws MsgException {
        List<PType> pTypes = pTypeDao.queryAll();
        if (pTypes == null) {
            throw new MsgException(PTypeCode.FAILURE_SELECT_ALL, "查看所有权限类型失败");
        } else {
            return new MsgException(PTypeCode.SUCCESS_PERMISSION_TYPE, "查看所有权限类型成功").toListJson(pTypes);
        }
    }

    @PermissionControl("添加权限类型")
    @Override
    public String addPType(PType pType) throws MsgException {
        if (pTypeDao.queryByName(pType.getName()) != null) {
            throw new MsgException(PTypeCode.EXIST_PERMISSION_TYPE, "已经存在该权限类型,添加失败");
        } else {
            if (pTypeDao.addPType(pType) != 0) {
                return new MsgException(PTypeCode.SUCCESS_PERMISSION_TYPE, "添加权限类型成功").toJson();
            } else {
                throw new MsgException(PTypeCode.FAILURE_ADD, "添加权限类型失败");
            }
        }
    }

    @PermissionControl("删除权限类型")
    @Override
    public String delPType(int id) throws MsgException {
        if (pTypeDao.queryById(id) == null) {
            throw new MsgException(PTypeCode.NOT_EXIST_PERMISSION_TYPE, "该权限类型不存在,删除失败");
        } else {
            if (pTypeDao.delById(id) != 0) {
                return new MsgException(PTypeCode.SUCCESS_PERMISSION_TYPE, "删除权限类型成功").toJson();
            } else {
                throw new MsgException(PTypeCode.FAILURE_DEL, "删除权限类型失败");
            }
        }
    }

    @PermissionControl("修改权限类型")
    @Override
    public String modifyPType(PType pType) throws MsgException {
        if (pTypeDao.queryById(pType.getId()) == null) {
            throw new MsgException(PTypeCode.NOT_EXIST_PERMISSION_TYPE, "该权限类型不存在,修改失败");
        } else {
            if (pTypeDao.modifyById(pType) != 0) {
                return new MsgException(PTypeCode.SUCCESS_PERMISSION_TYPE, "修改权限类型成功").toJson();
            } else {
                throw new MsgException(PTypeCode.FAILURE_UPD, "修改权限类型失败");
            }
        }
    }
}
